/**
 * 测试4：服务端业务处理超时，处理情况如何？
 * 在一次业务处理中花费了太长事件，超出了服务端设置的非活跃超时连接释放，可能导致其他连接被拖累超时释放。 
 * 假设目前就绪的文件fd为12345，处理1超时了，下面有两种情况
 * 1.如果2，3，4，5就是通信连接fd，那么没有问题，正常处理然后刷新活跃度。
 * 2.如果接下来的fd=2恰好为timerfd，那么就会进行非活跃连接的销毁释放，释放掉345.
 * 接下来再去处理345的时候由于连接释放就会导致内存访问出错，程序崩溃。
 * 解决办法：当进行连接释放的时候，也就是ReleaseInLoop函数，不能直接进行处理，而是封装一个Release函数
 * 将ReleaseInLoop压入到任务队列中，等到处理完这次所有的通信连接fd事件后，再去执行任务队列中的非活跃连接销毁释放。
 * 
 * 另外一个问题：非活跃连接销毁释放OnTime中我们只执行了一次RunAllTask,秒针只向后走了一步，如果业务处理事件过长，
 * 那么秒针只往后走一步是不合理，因此我们需要将从timerfd中读取的数据：距离上次超时了多少次，返回给OnTime，
 * OnTime进行循环处理
 */

#include "../source/server.hpp"

int main()
{
    for (int i = 0; i < 10; i++) {
        pid_t pid = fork();
        if (pid < 0) {
            DBG_LOG("FORK ERROR");
            return -1;
        }else if (pid == 0) {
            Socket cli_sock;
            cli_sock.CreateClient(8080, "127.0.0.1");
            std::string req = "GET /hello HTTP/1.1\r\nConnection: keep-alive\r\nContent-Length: 0\r\n\r\n";
            while(1) {
                assert(cli_sock.Send(req.c_str(), req.size()) != -1);
                char buf[1024] = {0};
                assert(cli_sock.Recv(buf, 1023));
                DBG_LOG("[%s]", buf);
            }
            cli_sock.Close();
            exit(0);
        }
    }
    while(1) sleep(1);
    return 0;
}